package cn.edu.ecnu.gis.client.gadgets;

import cn.edu.ecnu.gis.client.ltapi.localsearch.LTLocalSearchRequest;
import cn.edu.ecnu.gis.client.ltapi.localsearch.LTLocalSearchRequestHandle;
import cn.edu.ecnu.gis.client.model.Gadget;
import cn.edu.ecnu.gis.client.model.GadgetClass;
import cn.edu.ecnu.gis.client.view.GoogleMap;
import com.google.gwt.core.client.GWT;
import com.google.gwt.json.client.JSONArray;
import com.google.gwt.json.client.JSONObject;
import com.google.gwt.json.client.JSONParser;
import com.google.gwt.json.client.JSONString;
import com.google.gwt.user.client.ui.AbstractImagePrototype;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ImageBundle;
import com.mapitz.gwt.googleMaps.client.GLatLng;
import com.mapitz.gwt.googleMaps.client.GMap2;
import com.mapitz.gwt.googleMaps.client.GMap2Widget;

public class GoogleMapsGadget extends Gadget implements LTLocalSearchRequestHandle {
GMap2Widget mapWidget = new GMap2Widget("500", "500", new GLatLng(37.4419, -122.1419), 11, null);

    public static class Class extends GadgetClass {

        public Class() {
            super("Google Map", false);
            this.setGadgetType(1);
        }

        public Gadget newGadget() {
            return new GoogleMapsGadget(this);
        }
    }
    private static FlowPanel flowPanel = new FlowPanel();
    private GoogleMap map = new GoogleMap(flowPanel);

    public GoogleMap getGMap() {
        return map;
    }

    protected GoogleMapsGadget(Class c) {
        super(c);
        initWidget(mapWidget);
        //  flowPanel.setStyleName("googlemap");
        GMap2 gmaps = mapWidget.getGmap();  
        gmaps.setCenter(new GLatLng(37.4419, 122.1419));
        map.setMap(gmaps.getJSObject());
        //map.setCenter(37.75722,-122.44722);
        map.addControl();
    }

    public interface BoundImage extends ImageBundle {

        AbstractImagePrototype inbox();
    }

    public void refresh(String address) {
        LTLocalSearchRequest.search(address, "上海", this);
    }

    public AbstractImagePrototype getBoundImage() {
        BoundImage images = (BoundImage) GWT.create(BoundImage.class);
        return images.inbox();
    }

    public void onRequestComplete(String result) {
        JSONObject searchResult = (JSONObject) JSONParser.parse(result);
        //JSONArray entries = (JSONArray) searchResult.get("entries");
        JSONArray searchPoints = (JSONArray) searchResult.get("searchPoints");

        // for (int i = 0; i < searchPoints.size(); i++) {
        JSONObject item = (JSONObject) searchPoints.get(0);
        JSONString id = (JSONString) item.get("id");
        JSONString url = (JSONString) item.get("url");
        JSONString name = (JSONString) item.get("name");
        JSONArray points = (JSONArray) item.get("point");
        map.addMarker(points);
        HTML html = new HTML("<a href='" + url.stringValue() + "' target='_blank'>" + name.stringValue() + "</a>");
        html.setStyleName("News-Item");
    //list.add( html );
    //  }
    }

    public void onRequestFailed(String error) {
        HTML html = new HTML(" error ");
        html.setStyleName("News-Item");
    }
}
